Domain Modeling with Types
from Domain Modeling Made Functional
共有されたモデルの重要性 で見たように、共有されたモデルがコードにも反映される必要がある
理想的には、ソースコードがドキュメントしても機能すること
これにより、ドメインエキスパート や他の非エンジニアが、コードレビューしたり設計したりできる
型システム を使うとこれを実現できる
ドメインの文書化 で作成した文書とほとんど同じ
そもそも ドメインの文書化 の文書が日本語話者にはハードルが高いので、なおさら… radish-miyazaki.icon
ドメインに日本語を使う を試してみる
ドメインモデル は典型的なパターンがある。
単純な値(単純な値のモデリング)
文字列や整数などのプリミティブ型で表現される基本的な構成要素
ただし、int や string ではなく、OrderId や ProductCode などのユビキタス言語の概念で考える
複雑なデータのモデリング
AND による値の組み合わせ
密接に関連したデータのグループ
紙ベースの世界における、書類そのものや、書類に含まれるひとまとまりの要素
e.g. 名前、住所、注文
OR による選択肢
e.g. Order(注文) または Quote(見積)/ UnitQuantity(ユニット数) または KilogramQuantity(キログラム数)
ワークフロー(関数によるワークフローのモデリング)
インプットとアウトプットを持つビジネスプロセス
DDD では、永続的なアイデンティティ(e.g. ID)を持つオブジェクト(データ構造)を エンティティ 、持たないオブジェクトを 値オブジェクト と呼ぶ。
アイデンティティの考察: 値オブジェクト
アイデンティティの考察: エンティティ
エンティティには、エンティティのコレクションを持つ「トップレベル」のエンティティも存在する
DDD では、このようなエンティティのコレクションを 集約 とよび、トップレベルのエンティティを 集約ルート と呼ぶ
DMMF: 集約
#DDD #F# #読書メモ